클래스
✒️ 2025-05-19 10:24 내용 수정
Do it! 점프 투 파이썬(2017년 발행) 내용을 정리
객체를 표현하기 위한 설명 양식이자, 객체 지향 프로그램의 기본적인 사용자 정의 데이터형
- 객체 지향 언어인 Java에서도 클래스를 사용한다.
- 객체 지향(Object Oriented), 클래스(Classes) 참고.
- Java의 클래스 항목에 클래스에 대한 설명을 좀 더 상세히 작성했다.
- 객체에 관한 정보는 객체 지향 문서의 구성요소 참고.
- 클래스는 객체를 만들기 위한 설계도로, 같은 종류의 집단에 속하는 속성과 행위를 정의한 것이다.
- 하나의 클래스를 사용하여 여러 개의 객체를 만들 수 있다.
- 각 객체는 고유한 성질을 가질 수 있다.
- 클래스 생성은
class예약어와 클래스이름(대문자로 시작한다)으로 작성하며, 클래스 내부에 공통 성질 및 메서드를 작성한다.pass는 아무것도 수행하지 않는 문법으로, 임시로 코드를 작성할 때도 사용한다.- 제어문#pass 문 참고.
class ClassName:
pass
인스턴스(Instance)
- 객체는 클래스를 사용하여 만들 수 있고, 이를 인스턴스라 한다.
- 클래스(Classes)#인스턴스 참고.
a는 객체이고Car의 인스턴스다.
>>> class Car:
... pass
...
>>> a = Car()
>>> b = Car()
메서드(Method)
- 클래스 내부에 구현된 함수는 메서드(Method) 라고 부른다.
- 메서드(Methods) 참고.
class ClassName:
def fnName(args):
# 수행할 내용
- Python의 메서드의 첫 번째 매개변수 이름은 관례적으로
self를 사용하며, 객체를 호출할 때 호출한 객체 자신이 전달된다.
>>> class Car:
... def testFn(self, first, second):
... print(f"{first} and {second}")
...
>>> a = Car()
>>> a.testFn("apple", "banana")
apple and banana
- 속성(객체 변수) : 객체에 생성되는 객체만의 변수
- 객체의 속성은
객체변수.속성이름으로 접근할 수 있다.
>>> class Fruit:
... def setdata(self, name, color):
... self.name = name
... self.color = color
...
>>> a = Fruit()
>>> a.setdata("apple", "red")
>>> a.name
'apple'
>>> a.color
'red'
- 메서드를 사용하여 객체의 속성을 추가하고, 추가한 속성을 출력할 수 있다.
# 클래스.py
class Fruit:
def setdata(self, name, color):
self.name = name
self.color = color
def printfruit(self):
print(self.color, self.name)
def fullname(self):
return self.color + " " + self.name
a = Fruit()
a.setdata("apple", "red")
a.printfruit()
b = a.fullname()
print(b)
생성자
- 객체가 생성될 때 자동으로 호출되는 메서드로, 객체 변수를 원하는 값으로 초기화한다.
- Java의 생성자 (Constructors) 참고.
- Python에서 생성자는
__init__으로 작성한다.
# 클래스.py
class Fruit:
def __init__(self, name, color):
self.name = name
self.color = color
def setdata(self, name, color):
self.name = name
self.color = color
def printfruit(self):
print(self.color, self.name)
def fullname(self):
return self.color + " " + self.name
- 생성자를 추가한 뒤 인스턴스를 생성할 때 매개변수에 초기화할 속성값을 넣는다.
a = Fruit("grape", "green")
- 예시의
printfruit()메서드와fullname()메서드를 호출하면 초기화한 값이 적용되어 출력된다.
a.printfruit()
print(a.fullname())
소멸자
- 객체를 제거할 때 호출되는 메서드다.
class 클래스명:
def __del__(self):
# 수행할 내용
# 객체 소멸
del 클래스변수
클래스 변수
- 클래스 안에 선언하여 클래스 내에서 공통으로 사용되고, 모든 클래스 인스턴스에 공유되는 변수다.
- Java의 클래스(Classes)#1. 클래스의 구성, 필드(Fields) 도 참고.
class Family:
lastname = "kim"
a = Family()
b = Family()
print(a.lastname)
print(b.lastname)
Family.lastname = "park"
print(a.lastname)
print(b.lastname)
- 출력 결과를 보면 처음
a.lastname과b.lastname은 모두kim으로 뜬다.Family의 인스턴스인 객체a와b의lastname이 class에서 선언된 값과 동일하다.
Family.lastname = "park"으로 클래스 변수를 변경한 뒤 다시 출력해보면a와b의lastname모두 바뀐 값으로 뜬다.